<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Config Class : CodeIgniter User Guide</title>

<style type='text/css' media='all'>
@import url('../userguide.css');
</style>
<link rel='stylesheet' type='text/css' media='all'
	href='../userguide.css' />

<script type="text/javascript" src="../nav/nav.js"></script>
<script type="text/javascript" src="../nav/prototype.lite.js"></script>
<script type="text/javascript" src="../nav/moo.fx.js"></script>
<script type="text/javascript" src="../nav/user_guide_menu.js"></script>

<meta http-equiv='expires' content='-1' />
<meta http-equiv='pragma' content='no-cache' />
<meta name='robots' content='all' />
<meta name='author' content='ExpressionEngine Dev Team' />
<meta name='description' content='CodeIgniter User Guide' />

</head>
<body>

	<!-- START NAVIGATION -->
	<div id="nav">
		<div id="nav_inner">
			<script type="text/javascript">create_menu('../');</script>
		</div>
	</div>
	<div id="nav2">
		<a name="top"></a><a href="javascript:void(0);"
			onclick="myHeight.toggle();"><img
			src="../images/nav_toggle_darker.jpg" width="154" height="43"
			border="0" title="Toggle Table of Contents"
			alt="Toggle Table of Contents" /></a>
	</div>
	<div id="masthead">
		<table cellpadding="0" cellspacing="0" border="0" style="width: 100%">
			<tr>
				<td>
					<h1>CodeIgniter User Guide Version 2.0.3</h1>
				</td>
				<td id="breadcrumb_right"><a href="../toc.html">Table of
						Contents Page</a></td>
			</tr>
		</table>
	</div>
	<!-- END NAVIGATION -->


	<!-- START BREADCRUMB -->
	<table cellpadding="0" cellspacing="0" border="0" style="width: 100%">
		<tr>
			<td id="breadcrumb"><a href="http://codeigniter.com/">CodeIgniter
					Home</a> &nbsp;&#8250;&nbsp; <a href="../index.html">User Guide
					Home</a> &nbsp;&#8250;&nbsp; Config Class</td>
			<td id="searchbox">
				<form method="get" action="http://www.google.com/search">
					<input type="hidden" name="as_sitesearch" id="as_sitesearch"
						value="codeigniter.com/user_guide/" />Search User Guide&nbsp; <input
						type="text" class="input" style="width: 200px;" name="q" id="q"
						size="31" maxlength="255" value="" />&nbsp;<input type="submit"
						class="submit" name="sa" value="Go" />
				</form>
			</td>
		</tr>
	</table>
	<!-- END BREADCRUMB -->

	<br clear="all" />


	<!-- START CONTENT -->
	<div id="content">


		<h1>Config Class</h1>

		<p>
			The Config class provides a means to retrieve configuration
			preferences. These preferences can come from the default config file
			(
			<samp>application/config/config.php</samp>
			) or from your own custom config files.
		</p>

		<p class="important">
			<strong>Note:</strong> This class is initialized automatically by the
			system so there is no need to do it manually.
		</p>


		<h2>Anatomy of a Config File</h2>

		<p>
			By default, CodeIgniter has one primary config file, located at
			<samp>application/config/config.php</samp>
			. If you open the file using your text editor you'll see that config
			items are stored in an array called
			<var>$config</var>
			.
		</p>

		<p>
			You can add your own config items to this file, or if you prefer to
			keep your configuration items separate (assuming you even need config
			items), simply create your own file and save it in
			<dfn>config</dfn>
			folder.
		</p>

		<p>
			<strong>Note:</strong> If you do create your own config files use the
			same format as the primary one, storing your items in an array called
			<var>$config</var>
			. CodeIgniter will intelligently manage these files so there will be
			no conflict even though the array has the same name (assuming an
			array index is not named the same as another).
		</p>

		<h2>Loading a Config File</h2>

		<p>
			<strong>Note:</strong> CodeIgniter automatically loads the primary
			config file (
			<samp>application/config/config.php</samp>
			), so you will only need to load a config file if you have created
			your own.
		</p>

		<p>There are two ways to load a config file:</p>

		<ol>
			<li><strong>Manual Loading</strong>

				<p>
					To load one of your custom config files you will use the following
					function within the <a href="../general/controllers.html">controller</a>
					that needs it:
				</p> <code>
					$this->config->load('
					<var>filename</var>
					');
				</code>

				<p>
					Where
					<var>filename</var>
					is the name of your config file, without the .php file extension.
				</p>

				<p>
					If you need to load multiple config files normally they will be
					merged into one master config array. Name collisions can occur,
					however, if you have identically named array indexes in different
					config files. To avoid collisions you can set the second parameter
					to
					<kbd>TRUE</kbd>
					and each config file will be stored in an array index corresponding
					to the name of the config file. Example:
				</p> <code>
					// Stored in an array with this prototype:
					$this->config['blog_settings'] = $config<br />
					$this->config->load('
					<var>blog_settings</var>
					',
					<kbd>TRUE</kbd>
					);
				</code>

				<p>
					Please see the section entitled
					<dfn>Fetching Config Items</dfn>
					below to learn how to retrieve config items set this way.
				</p>

				<p>The third parameter allows you to suppress errors in the
					event that a config file does not exist:</p> <code>
					$this->config->load('
					<var>blog_settings</var>
					',
					<dfn>FALSE</dfn>
					,
					<kbd>TRUE</kbd>
					);
				</code></li>
			<li><strong>Auto-loading</strong>

				<p>
					If you find that you need a particular config file globally, you
					can have it loaded automatically by the system. To do this, open
					the <strong>autoload.php</strong> file, located at
					<samp>application/config/autoload.php</samp>
					, and add your config file as indicated in the file.
				</p></li>
		</ol>


		<h2>Fetching Config Items</h2>

		<p>To retrieve an item from your config file, use the following
			function:</p>

		<code>
			$this->config->item('
			<var>item name</var>
			');
		</code>

		<p>
			Where
			<var>item name</var>
			is the $config array index you want to retrieve. For example, to
			fetch your language choice you'll do this:
		</p>

		<code>$lang = $this->config->item('language');</code>

		<p>The function returns FALSE (boolean) if the item you are trying
			to fetch does not exist.</p>

		<p>
			If you are using the second parameter of the
			<kbd>$this->config->load</kbd>
			function in order to assign your config items to a specific index you
			can retrieve it by specifying the index name in the second parameter
			of the
			<kbd>$this->config->item()</kbd>
			function. Example:
		</p>

		<code>
			// Loads a config file named blog_settings.php and assigns it to an
			index named "blog_settings"<br /> $this->config->load('
			<var>blog_settings</var>
			',
			<kbd>TRUE</kbd>
			);<br /> <br /> // Retrieve a config item named site_name contained
			within the blog_settings array<br /> $site_name =
			$this->config->item('
			<dfn>site_name</dfn>
			', '
			<var>blog_settings</var>
			');<br /> <br /> // An alternate way to specify the same item:<br />
			$blog_config = $this->config->item('
			<var>blog_settings</var>
			');<br /> $site_name = $blog_config['site_name'];
		</code>

		<h2>Setting a Config Item</h2>

		<p>If you would like to dynamically set a config item or change an
			existing one, you can do so using:</p>

		<code>
			$this->config->set_item('
			<var>item_name</var>
			', '
			<var>item_value</var>
			');
		</code>

		<p>
			Where
			<var>item_name</var>
			is the $config array index you want to change, and
			<var>item_value</var>
			is its value.
		</p>

		<a name="environments"></a>
		<h2>Environments</h2>

		<p>
			You may load different configuration files depending on the current
			environment. The
			<kbd>ENVIRONMENT</kbd>
			constant is defined in index.php, and is described in detail in the <a
				href="../general/environments.html">Handling Environments</a>
			section.
		</p>

		<p>To create an environment-specific configuration file, create or
			copy a configuration file in
			application/config/{ENVIRONMENT}/{FILENAME}.php</p>

		<p>For example, to create a production-only config.php, you would:</p>

		<ol>
			<li>Create the directory application/config/production/</li>
			<li>Copy your existing config.php into the above directory</li>
			<li>Edit application/config/production/config.php so it contains
				your production settings</li>
		</ol>

		<p>
			When you set the
			<kbd>ENVIRONMENT</kbd>
			constant to 'production', the settings for your new production-only
			config.php will be loaded.
		</p>

		<p>You can place the following configuration files in
			environment-specific folders:</p>

		<ul>
			<li>Default CodeIgniter configuration files</li>
			<li>Your own custom configuration files</li>
		</ul>

		<p>
			<strong>Note:</strong> CodeIgniter always tries to load the
			configuration files for the current environment first. If the file
			does not exist, the global config file (i.e., the one in
			<samp>application/config/</samp>
			) is loaded. This means you are not obligated to place <strong>all</strong>
			of your configuration files in an environment folder &minus; only the
			files that change per environment.
		</p>

		<h2>Helper Functions</h2>

		<p>The config class has the following helper functions:</p>

		<h2>$this->config->site_url();</h2>
		<p>This function retrieves the URL to your site, along with the
			"index" value you've specified in the config file.</p>

		<h2>$this->config->base_url();</h2>
		<p>This function retrieves the URL to your site, plus an optional
			path such as to a stylesheet or image.</p>

		<p>
			The two functions above are normally accessed via the corresponding
			functions in the <a href="../helpers/url_helper.html">URL Helper.</a>
		</p>

		<h2>$this->config->system_url();</h2>
		<p>
			This function retrieves the URL to your
			<dfn>system folder</dfn>
			.
		</p>


	</div>
	<!-- END CONTENT -->


	<div id="footer">
		<p>
			Previous Topic:&nbsp;&nbsp;<a href="calendar.html">Calendaring
				Class</a> &nbsp;&nbsp;&nbsp;&middot;&nbsp;&nbsp; <a href="#top">Top
				of Page</a>&nbsp;&nbsp;&nbsp;&middot;&nbsp;&nbsp; <a
				href="../index.html">User Guide Home</a>&nbsp;&nbsp;&nbsp;&middot;&nbsp;&nbsp;
			Next Topic:&nbsp;&nbsp;<a href="../database/index.html">Database
				Class</a>
		</p>
		<p>
			<a href="http://codeigniter.com">CodeIgniter</a> &nbsp;&middot;&nbsp;
			Copyright &#169; 2006 - 2011 &nbsp;&middot;&nbsp; <a
				href="http://ellislab.com/">EllisLab, Inc.</a>
		</p>
	</div>

</body>
</html>
